﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////

// Reviewed
#pragma once

#include "IInstanceInput.h"
#include "Coordinate3d.h"

namespace gcmp
{
    /// \brief 点式构件创建所需的数据结构。

    class GCMP_MODEL_INTERFACE_EXPORT IOnePointInstanceInput : public IInstanceInput
    {
    public:
        /// \brief 创建点式构件创建所需的数据结构。
        /// \param pDoc 构件文档指针
        /// \param planeId 构件关联平面Id
        /// \param familyId 构件的族Id
        /// \param familyType 构件的族类型名称
        /// \return 返回点式构件创建所需的数据结构的指针
        static OwnerPtr<IOnePointInstanceInput> Create(
            IDocument* pDoc,
            const ElementId& planeId,
            const ElementId& familyId,
            const std::wstring& familyType);

        /// \brief 析构函数
        virtual ~IOnePointInstanceInput(){}

        /// \brief 获取点式构件的创建的工作平面的坐标系
        /// \return 返回工作平面的坐标系
        virtual const Coordinate3d GetWorkPlaneCoordinate3d() const = 0;

        /// \brief 设置点式构件的创建的工作平面的坐标系
        /// \param workPlaneCoord 点式构件的创建的工作平面的坐标系
        virtual void SetWorkPlaneCoordinate3d(const Coordinate3d workPlaneCoord) = 0;

        /// \brief 获取构件的位置
        /// \return 返回构件的位置
        virtual const Vector3d& GetPosition() const = 0;

        /// \brief 设置构件的位置
        /// \param pos 构件的位置
        virtual void SetPosition(const Vector3d& pos) = 0;

        /// \brief 获取构件的高度
        /// \return 返回构件的高度
        virtual double GetHeight() const = 0;

        /// \brief 设置构件的高度
        /// \param value 构件的高度
        virtual void SetHeight(double value) = 0;

        /// \brief 获取宿主对象Id
        /// \return 返回宿主对象Id
        virtual ElementId GetHostInstanceId() const = 0;

        /// \brief 设置宿主对象Id
        /// \param id 宿主对象Id
        virtual void SetHostInstanceId(const ElementId& id) = 0;
    };
}

